package com.ktjy.web.interceptors;

import com.ktjy.entity.SysUser;
import com.ktjy.service.SysUserService;
import com.ktjy.utils.Constants;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;

/**
 * 登录认证的拦截器，当用户在没有登录认证时，如果访问除登录、报错页面以外的其他页面时，需要进行登录认证的判断，如果
 * 是在没有登录的情况下访问，则跳转到登录页面
 * @version v1.0
 * @Author JieGe
 * @Create 2024-12-17 - 11:35
 */
public class AuthInterceptor implements HandlerInterceptor {

    private static final Logger LOGGER = LoggerFactory.getLogger(AuthInterceptor.class);

    public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception {
        LOGGER.debug("进入自定义拦截器AuthInterceptor,请求路径是{}", request.getRequestURI());
        HttpSession session = request.getSession();
        // 获取用户信息, 因为之前LoginController登录成功后，会将用户对象保存到session中，其key为sessionUser
        SysUser sysUser = (SysUser) session.getAttribute(Constants.SESSION_USER);
        if (null == sysUser) {
            // 说明用户是在没有登录的情况下，访问除登录、500页面以外的其他页面
            request.getRequestDispatcher("/WEB-INF/jsp/401.jsp").forward(request, response);
            return false; // false表示请求被拒绝
        }
        return true;// true表示请求可以通过，放行
    }
}
